जावास्क्रिप्ट मॉड्यूल ग्राफ़ ऑप्टिमाइज़ेशन: डिपेंडेंसी ग्राफ़ सरलीकरण | MLOG | MLOG
            document.addEventListener("DOMContentLoaded", function() {
 var lazyloadImages = document.querySelectorAll("img.lazy");

 function lazyload () {
 lazyloadImages.forEach(function(img) {
 if (img.offsetTop < (window.innerHeight + window.pageYOffset)) {
 img.src = img.dataset.src;
 img.classList.remove("lazy");
 }
 });
 if(lazyloadImages.length === 0) {
 document.removeEventListener("scroll", lazyload);
 window.removeEventListener("resize", lazyload);
 window.removeEventListener("orientationChange", lazyload);
 }
 }

 document.addEventListener("scroll", lazyload);
 window.addEventListener("resize", lazyload);
 window.addEventListener("orientationChange", lazyload);
 });
            

कार्यान्वयन योग्य अंतर्दृष्टि: स्क्रीन पर तुरंत दिखाई न देने वाली इमेजेज, वीडियो और अन्य संसाधनों के लिए लेज़ी लोडिंग लागू करें। `lozad.js` जैसी लाइब्रेरी या ब्राउज़र-नेटिव लेज़ी-लोडिंग एट्रिब्यूट्स का उपयोग करने पर विचार करें।

6. ट्री शेकिंग और डेड कोड एलिमिनेशन

ट्री शेकिंग एक ऐसी तकनीक है जो बिल्ड प्रक्रिया के दौरान आपके एप्लिकेशन से अप्रयुक्त कोड को हटा देती है। यह बंडल आकार को काफी कम कर सकता है, खासकर यदि आप ऐसी लाइब्रेरी का उपयोग कर रहे हैं जिसमें बहुत सारा कोड शामिल है जिसकी आपको आवश्यकता नहीं है।

उदाहरण:

मान लीजिए कि आप एक यूटिलिटी लाइब्रेरी का उपयोग कर रहे हैं जिसमें 100 फ़ंक्शन हैं, लेकिन आप अपने एप्लिकेशन में उनमें से केवल 5 का उपयोग करते हैं। ट्री शेकिंग के बिना, पूरी लाइब्रेरी आपके बंडल में शामिल हो जाएगी। ट्री शेकिंग के साथ, केवल वे 5 फ़ंक्शन शामिल किए जाएंगे जिनका आप उपयोग करते हैं।

कॉन्फ़िगरेशन:

सुनिश्चित करें कि आपका बंडलर ट्री शेकिंग करने के लिए कॉन्फ़िगर किया गया है। वेबपैक में, यह आमतौर पर प्रोडक्शन मोड का उपयोग करते समय डिफ़ॉल्ट रूप से सक्षम होता है। रोलअप में, आपको `@rollup/plugin-commonjs` प्लगइन का उपयोग करने की आवश्यकता हो सकती है।

कार्यान्वयन योग्य अंतर्दृष्टि: ट्री शेकिंग करने के लिए अपने बंडलर को कॉन्फ़िगर करें और सुनिश्चित करें कि आपका कोड इस तरह से लिखा गया है जो ट्री शेकिंग के अनुकूल हो (जैसे, ES मॉड्यूल का उपयोग करके)।

7. डिपेंडेंसी को कम करना

आपके प्रोजेक्ट में डिपेंडेंसी की संख्या सीधे मॉड्यूल ग्राफ़ की जटिलता को प्रभावित कर सकती है। प्रत्येक डिपेंडेंसी ग्राफ़ में जुड़ती है, जिससे संभावित रूप से बिल्ड समय और बंडल आकार बढ़ जाता है। नियमित रूप से अपनी डिपेंडेंसी की समीक्षा करें और उन सभी को हटा दें जिनकी अब आवश्यकता नहीं है या जिन्हें छोटे विकल्पों से बदला जा सकता है।

उदाहरण:

एक साधारण कार्य के लिए एक बड़ी यूटिलिटी लाइब्रेरी का उपयोग करने के बजाय, अपना स्वयं का फ़ंक्शन लिखने या एक छोटी, अधिक विशिष्ट लाइब्रेरी का उपयोग करने पर विचार करें।

कार्यान्वयन योग्य अंतर्दृष्टि: `npm audit` या `yarn audit` जैसे टूल का उपयोग करके नियमित रूप से अपनी डिपेंडेंसी की समीक्षा करें और डिपेंडेंसी की संख्या को कम करने या उन्हें छोटे विकल्पों से बदलने के अवसरों की पहचान करें।

8. बंडल आकार और प्रदर्शन का विश्लेषण करना

सुधार के क्षेत्रों की पहचान करने के लिए नियमित रूप से अपने बंडल आकार और प्रदर्शन का विश्लेषण करें। वेबपैक-बंडल-एनालाइज़र और लाइटहाउस जैसे उपकरण आपको बड़े मॉड्यूल, अप्रयुक्त कोड और प्रदर्शन की बाधाओं को पहचानने में मदद कर सकते हैं।

उदाहरण (webpack-bundle-analyzer):

अपने वेबपैक कॉन्फ़िगरेशन में `webpack-bundle-analyzer` प्लगइन जोड़ें।

            const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
 // ... other webpack configuration
 plugins: [
 new BundleAnalyzerPlugin()
 ]
};

            

जब आप अपना बिल्ड चलाते हैं, तो प्लगइन एक इंटरेक्टिव ट्रीमैप उत्पन्न करेगा जो आपके बंडल में प्रत्येक मॉड्यूल का आकार दिखाता है।

कार्यान्वयन योग्य अंतर्दृष्टि: अपनी बिल्ड प्रक्रिया में बंडल विश्लेषण टूल को एकीकृत करें और ऑप्टिमाइज़ेशन के क्षेत्रों की पहचान करने के लिए नियमित रूप से परिणामों की समीक्षा करें।

9. मॉड्यूल फेडरेशन (Module Federation)

मॉड्यूल फेडरेशन, वेबपैक 5 की एक विशेषता, आपको रनटाइम पर विभिन्न एप्लिकेशनों के बीच कोड साझा करने की अनुमति देती है। यह माइक्रोफ्रंटएंड बनाने या विभिन्न प्रोजेक्ट्स के बीच सामान्य कंपोनेंट्स को साझा करने के लिए उपयोगी हो सकता है। मॉड्यूल फेडरेशन कोड के दोहराव से बचकर बंडल आकार को कम करने और प्रदर्शन में सुधार करने में मदद कर सकता है।

उदाहरण (बेसिक मॉड्यूल फेडरेशन सेटअप):

एप्लिकेशन A (होस्ट):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appA",
 remotes: {
 appB: "appB@http://localhost:3001/remoteEntry.js",
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

एप्लिकेशन B (रिमोट):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appB",
 exposes: {
 './MyComponent': './src/MyComponent',
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

कार्यान्वयन योग्य अंतर्दृष्टि: साझा कोड वाले बड़े एप्लिकेशनों के लिए या माइक्रोफ्रंटएंड बनाने के लिए मॉड्यूल फेडरेशन का उपयोग करने पर विचार करें।

विशिष्ट बंडलर विचार

जब मॉड्यूल ग्राफ़ ऑप्टिमाइज़ेशन की बात आती है तो विभिन्न बंडलर की अलग-अलग ताकतें और कमजोरियां होती हैं। यहां लोकप्रिय बंडलर के लिए कुछ विशिष्ट विचार दिए गए हैं:

वेबपैक (Webpack)

रोलअप (Rollup)

पार्सल (Parcel)

वैश्विक परिप्रेक्ष्य: विभिन्न संदर्भों के लिए ऑप्टिमाइज़ेशन को अपनाना

मॉड्यूल ग्राफ़ को ऑप्टिमाइज़ करते समय, उस वैश्विक संदर्भ पर विचार करना महत्वपूर्ण है जिसमें आपके एप्लिकेशन का उपयोग किया जाएगा। नेटवर्क की स्थिति, डिवाइस की क्षमताएं और उपयोगकर्ता जनसांख्यिकी जैसे कारक विभिन्न ऑप्टिमाइज़ेशन तकनीकों की प्रभावशीलता को प्रभावित कर सकते हैं।

निष्कर्ष

जावास्क्रिप्ट मॉड्यूल ग्राफ़ को ऑप्टिमाइज़ करना फ्रंट-एंड डेवलपमेंट का एक महत्वपूर्ण पहलू है। डिपेंडेंसी को सरल बनाकर, सर्कुलर डिपेंडेंसी को हटाकर, और कोड स्प्लिटिंग को लागू करके, आप बिल्ड प्रदर्शन में काफी सुधार कर सकते हैं, बंडल आकार को कम कर सकते हैं, और एप्लिकेशन लोडिंग समय को बढ़ा सकते हैं। सुधार के क्षेत्रों की पहचान करने के लिए नियमित रूप से अपने बंडल आकार और प्रदर्शन का विश्लेषण करें और अपनी ऑप्टिमाइज़ेशन रणनीतियों को उस वैश्विक संदर्भ के अनुकूल बनाएं जिसमें आपके एप्लिकेशन का उपयोग किया जाएगा। याद रखें कि ऑप्टिमाइज़ेशन एक सतत प्रक्रिया है, और इष्टतम परिणाम प्राप्त करने के लिए निरंतर निगरानी और शोधन आवश्यक है।

इन तकनीकों को लगातार लागू करके, दुनिया भर के डेवलपर्स तेज, अधिक कुशल और अधिक उपयोगकर्ता-अनुकूल वेब एप्लिकेशन बना सकते हैं।